package com.dmgis.qxfw.dataservice.commonservice.utils;


import com.dmgis.qxfw.dataservice.commonservice.common.DbConfig;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;


public class RedisUtil {

    private static volatile JedisPool jedisPool = null;

    private static JedisPool getPool() {
        if (jedisPool == null) {
            JedisPoolConfig config = new JedisPoolConfig();
            //控制一个pool可分配多少个jedis实例，通过pool.getResource()来获取；
            //如果赋值为-1，则表示不限制；如果pool已经分配了maxActive个jedis实例，则此时pool的状态为exhausted(耗尽)。
            config.setMaxTotal(10000);
            //控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
            config.setMaxIdle(5000);
            //表示当borrow(引入)一个jedis实例时，最大的等待时间，如果超过等待时间，则直接抛出JedisConnectionException；
            config.setMaxWaitMillis(10000 * 10);
            //在borrow一个jedis实例时，是否提前进行validate操作；如果为true，则得到的jedis实例均是可用的；
            config.setTestOnBorrow(true);
            config.setTestOnReturn(true);

            //目前redis只有一个服务器
            jedisPool = new JedisPool(config, DbConfig.rd_host,
                    Integer.parseInt(DbConfig.rd_port),10000);
        }
        return jedisPool;
    }

    public static synchronized Jedis getJedis() {
        Jedis jedis = null;
        jedisPool = getPool();
        if (jedisPool != null) {
            try {
                if (jedis == null) {
                    jedis = jedisPool.getResource();
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
        return jedis;
    }
    public static synchronized void returnBrokenResource(Jedis jedis) {
        if (jedis != null) {
            jedis.close();
        }
    }
}